package com.xcyy.zjdxmjk.zjdxmjk.controller;

import com.xcyy.zjdxmjk.zjdxmjk.VO.ResultVO;
import com.xcyy.zjdxmjk.zjdxmjk.VO.ZHQKVO;
import com.xcyy.zjdxmjk.zjdxmjk.common.ResultVOUtil;
import com.xcyy.zjdxmjk.zjdxmjk.entity.Country;
import com.xcyy.zjdxmjk.zjdxmjk.service.CountryService;
import com.xcyy.zjdxmjk.zjdxmjk.service.HouseService;
import com.xcyy.zjdxmjk.zjdxmjk.service.TownService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RestController
public class ZhqkController {

    @Autowired
    private HouseService houseService;
    @Autowired
    private TownService townService;
    @Autowired
    private CountryService countryService;

    @PostMapping("/zhqk")
    private ResultVO zhqk() {


        //1、查出全院农村宅基地总数和集体建设用地总数
        Object o1 = townService.countZjdAndJsyd();
        //农村宅基地总数
        Integer nczjd = Integer.parseInt(((BigDecimal) ((Object[]) o1)[0]).toString());
        //集体建设用地总数
        Integer jtjsyd = Integer.parseInt(((BigDecimal) ((Object[]) o1)[1]).toString());


        //2、查出农村宅基地完成数（权籍调查，不动产测量），集体建设用地完成数（权籍调查，不动产测量）
        //农村宅基地权籍调查完成数
        Integer nczjdqjdc = 0;
        //农村宅基地不动产测量完成数
        Integer nczjdbdccl = 0;
        //集体建设用地权籍调查完成数
        Integer jtjsydqjdc = 0;
        //集体建设用地不动产测量
        Integer jtjsydbdccl = 0;

        List<Object> o2 = houseService.countHouse();
        for (Object o : o2) {
            if ((Integer) (((Object[]) o)[0]) == 0 && (Integer) (((Object[]) o)[1]) == 0) {
                nczjdqjdc = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 0 && (Integer) (((Object[]) o)[1]) == 1) {
                nczjdbdccl = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 1 && (Integer) (((Object[]) o)[1]) == 0) {
                jtjsydqjdc = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 1 && (Integer) (((Object[]) o)[1]) == 1) {
                jtjsydbdccl = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            }
        }

        //3、查出实施方案，数据建库，检查验收
        Object o3 = countryService.countCountry();
        Integer ssfa = Integer.parseInt(((BigDecimal) ((Object[]) o3)[0]).toString());
        Integer sjjk = Integer.parseInt(((BigDecimal) ((Object[]) o3)[1]).toString());
        Integer jcys = Integer.parseInt(((BigDecimal) ((Object[]) o3)[2]).toString());
        Integer countryCount = Integer.parseInt(((BigInteger) ((Object[]) o3)[3]).toString());
        //4、查出调查公示
        Object o4 = townService.countDcjggs();
        Integer dcjggs = Integer.parseInt(((BigDecimal) ((Object[]) o4)[0]).toString());
        Integer townCount = Integer.parseInt(((BigInteger) ((Object[]) o4)[1]).toString());

        //赋值
        List<ZHQKVO> tongJiVOS = new ArrayList<>();
        tongJiVOS.add(new ZHQKVO("农村宅基地权籍调查", nczjdqjdc, nczjd));
        tongJiVOS.add(new ZHQKVO("农村宅基地不动产测量", nczjdbdccl, nczjd));
        tongJiVOS.add(new ZHQKVO("集体建设用地权籍调查", jtjsydqjdc, jtjsyd));
        tongJiVOS.add(new ZHQKVO("集体建设用地不动产测量", jtjsydbdccl, jtjsyd));
        tongJiVOS.add(new ZHQKVO("实施方案", ssfa, countryCount));
        tongJiVOS.add(new ZHQKVO("调查结果公示", dcjggs, townCount));
        tongJiVOS.add(new ZHQKVO("数据建库", sjjk, countryCount));
        tongJiVOS.add(new ZHQKVO("检查验收", jcys, countryCount));

        return ResultVOUtil.success(tongJiVOS);
    }

    @PostMapping("/qybh")
    private ResultVO qybh(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
                          @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {

        //1、查出全院农村宅基地总数和集体建设用地总数
        Object o1 = townService.countZjdAndJsyd();
        //农村宅基地总数
        Integer nczjd = Integer.parseInt(((BigDecimal) ((Object[]) o1)[0]).toString());
        //集体建设用地总数
        Integer jtjsyd = Integer.parseInt(((BigDecimal) ((Object[]) o1)[1]).toString());

        //2、查出时间区间内的新增情况
        List<Object> o2 = houseService.findByDate(startDate, endDate);
        //农村宅基地权籍调查完成数
        Integer nczjdqjdc = 0;
        //农村宅基地不动产测量完成数
        Integer nczjdbdccl = 0;
        //集体建设用地权籍调查完成数
        Integer jtjsydqjdc = 0;
        //集体建设用地不动产测量
        Integer jtjsydbdccl = 0;
        for (Object o : o2) {
            if ((Integer) (((Object[]) o)[0]) == 0 && (Integer) (((Object[]) o)[1]) == 0) {
                nczjdqjdc = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 0 && (Integer) (((Object[]) o)[1]) == 1) {
                jtjsydqjdc = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 1 && (Integer) (((Object[]) o)[1]) == 0) {
                nczjdbdccl = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            } else if ((Integer) (((Object[]) o)[0]) == 1 && (Integer) (((Object[]) o)[1]) == 1) {
                jtjsydbdccl = Integer.parseInt(((BigDecimal) ((Object[]) o)[2]).toString());
            }
        }
        List<ZHQKVO> tongJiVOS = new ArrayList<>();
        tongJiVOS.add(new ZHQKVO("农村宅基地权籍调查", nczjdqjdc, nczjd));
        tongJiVOS.add(new ZHQKVO("农村宅基地不动产测量", nczjdbdccl, nczjd));
        tongJiVOS.add(new ZHQKVO("集体建设用地权籍调查", jtjsydqjdc, jtjsyd));
        tongJiVOS.add(new ZHQKVO("集体建设用地不动产测量", jtjsydbdccl, jtjsyd));
        return ResultVOUtil.success(tongJiVOS);
    }

    @PostMapping("/countzs")
    private ResultVO countzs() {

        List<Country> countries = countryService.findAll();
        String codeStr;
        for (Country country : countries) {
            codeStr = country.getCode().substring(0, 6);
        }
        return ResultVOUtil.success();
    }
}
